package controladores;

import fornecedor.CadastroFornecedor;
import fornecedor.Fornecedor;
import fornecedor.FornecedorNaoCadastradoException;
import fornecedor.RepositorioFornecedor;
import java.util.List;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
* Classe que conter� todas as valida��es da classe Fornecedor
* @author Alberto Medeiros albertomedeiros214@gmail.com
*/




public class ControladorFornecedor {
    private RepositorioFornecedor objRepositorioFornecedor;
    
    public ControladorFornecedor(RepositorioFornecedor objRepositorioFornecedor) {
        this.objRepositorioFornecedor = objRepositorioFornecedor;
    }
    
    /**
     * Método que ira cadastrar os Fornecedores na base
     * 
     * @param objFornecedor
     * @throws ErroAcessoRepositorioException 
     */
    public void cadastrar(Fornecedor objFornecedor) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        CadastroFornecedor objCadastroFornecedor = new CadastroFornecedor(this.objRepositorioFornecedor);
        
        // Casts
        boolean statusFornecedor = (boolean) objFornecedor.getStatusFornecedor();
        
        // Validações
        if(objFornecedor.getDescricaoFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("Descrição Fornecedor");
        if(objFornecedor.getEmailFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("E-mail Fornecedor");
        if(objFornecedor.getContato().trim().length() == 0) throw new CamposObrigatoriosException("Contato Fornecedor");
        if(objFornecedor.getFoneFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("Telefone Fornecedor");
        if(objFornecedor.getCelularFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("Celular Fornecedor");
        
        // Setando os valores
        objFornecedor.setStatusFornecedor(statusFornecedor);                        
        
        // Cadastrando o objeto
        objCadastroFornecedor.cadastrarAtualizar(objFornecedor);
    }
    
     /**
     * Método que ira  atualizar os Fornecedores na base
     * 
     * @param objFornecedor
     * @throws ErroAcessoRepositorioException 
     */
    public void atualizar(Fornecedor objFornecedor) throws ErroAcessoRepositorioException, CamposObrigatoriosException{
        CadastroFornecedor objCadastroFornecedor = new CadastroFornecedor(this.objRepositorioFornecedor);
        
        // Casts
        int idFornecedor =  objFornecedor.getIdFornecedor();
        boolean statusFornecedor =  objFornecedor.getStatusFornecedor();
        // Validações
        //if(idFornecedor == 0) throw new CamposObrigatoriosException("Identificador Fornecedor");
        if(objFornecedor.getDescricaoFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("Descrição Fornecedor");
        if(objFornecedor.getEmailFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("E-mail Fornecedor");
        if(objFornecedor.getContato().trim().length() == 0) throw new CamposObrigatoriosException("Contato Fornecedor");
        if(objFornecedor.getFoneFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("Telefone Fornecedor");
        if(objFornecedor.getCelularFornecedor().trim().length() == 0) throw new CamposObrigatoriosException("Celular Fornecedor");
        
        // Setando os valores
       // objFornecedor.setIdFornecedor(idFornecedor);
        objFornecedor.setStatusFornecedor(statusFornecedor);                        
        
        // Atualizando o objeto
        objCadastroFornecedor.cadastrarAtualizar(objFornecedor);
    }

     /**
     * Método que irá procurar um determinado objeto na base
     * 
     * @param idFornecedor
     * @throws FornecedorNaoCadastradoException
     * @throws ErroAcessoRepositorioException 
     * @return Fornecedor
     */
    public Fornecedor procurar(int idFornecedor) throws FornecedorNaoCadastradoException, ErroAcessoRepositorioException{
       CadastroFornecedor objCadastroFornecedor = new CadastroFornecedor(this.objRepositorioFornecedor);
        
        // procurando o objeto
        return objCadastroFornecedor.procurar(idFornecedor);
    }
    
     /**
     * Método que ira verificar a existência de um objeto na base
     * 
     * @param idFornecedor
     * @throws ErroAcessoRepositorioException 
     * @return boolean
     */
    public boolean existe(int idFornecedor) throws ErroAcessoRepositorioException{
        CadastroFornecedor objCadastroFornecedor = new CadastroFornecedor(this.objRepositorioFornecedor);
        
        // verificando a existencia do objeto
        return objCadastroFornecedor.existe(idFornecedor);
    }
    
    /**
     * Método que ira listar todos os objetos da base     * 
     * 
     * @return List<Fornecedor>
     * @throws Exception
     * @throws ErroAcessoRepositorioException 
     */
    public List<Fornecedor> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException{
        CadastroFornecedor objCadastroFornecedor = new CadastroFornecedor(this.objRepositorioFornecedor);
        
        // listandos os objetos
        return objCadastroFornecedor.listar(strComplemento);
    }

    /**
     * Método que ira remover um determinado objeto pelo id da base
     * 
     * @param idFornecedor
     * @throws FornecedorNaoCadastradoException
     * @throws ErroAcessoRepositorioException 
     */
    public void remover(int idFornecedor) throws FornecedorNaoCadastradoException, ErroAcessoRepositorioException{
        CadastroFornecedor objCadastroFornecedor = new CadastroFornecedor(this.objRepositorioFornecedor);
        
        // removendo o objeto
        objCadastroFornecedor.remover(idFornecedor);
    }
    
    /**
     * Método que ira listar os objetos Fornacedores na base pela descrição
     * 
     * @throws Exception
     * @throws ErroAcessoRepositorioException
     * @return List<Fornecedor>
     */
    public List<Fornecedor> listarPorDescricao(String strDescricao) throws Exception, ErroAcessoRepositorioException {
        CadastroFornecedor objCadastroFornecedor = new CadastroFornecedor(this.objRepositorioFornecedor);
        
        // listandos os objetos
        return objCadastroFornecedor.listarPorDescricao(strDescricao);
    }
}
